package com.ginmeta.service.system;

import com.ginmeta.common.utils.StringUtils;
import com.ginmeta.domain.system.entity.SysRole;
import com.ginmeta.domain.system.vo.RoleDetailRespVO;
import com.ginmeta.domain.system.vo.RolePageReqVO;
import com.ginmeta.mapper.system.SysRoleMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 角色业务层
 * @author GinMeta
 */
@Slf4j
@Service
public class SysRoleService extends ServiceImpl<SysRoleMapper, SysRole> {

    /**
     * 查询角色列表
     * @param reqVO 参数
     * @return 结果
     */
    public Page<RoleDetailRespVO> selectRoleList(RolePageReqVO reqVO, Page<RoleDetailRespVO> page) {
        return mapper.paginateAs(page, QueryWrapper.create()
                        .from(SysRole.class)
                        .where(SysRole::getRoleName).eq(reqVO.getRoleName(), StringUtils::isNotBlank)
                        .orderBy(SysRole::getRoleSort).asc()
                , RoleDetailRespVO.class);
    }

    /**
     * 根据用户ID查询角色
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public List<SysRole> selectRolesByUserId(Long userId) {
        return mapper.selectRolePermissionByUserId(userId);
    }

    /**
     * 根据用户ID查询角色权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public Set<String> selectRolePermissionByUserId(Long userId) {
        List<SysRole> perms = mapper.selectRolePermissionByUserId(userId);
        return perms.stream().map(SysRole::getRoleKey).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
    }
}
